package snake;


import ui.Event;
import ui.SnakeUserInterface;
import ui.UserInterfaceFactory;

public class Snake {
	static final int SNELHEID = 5;
	static final int HOOGTE = 15;
	static final int BREEDTE = 15;
	boolean bewegingToegestaan;
	Snake(){
	}

	void laatZien(Veld veld){
		veld.ui.maakLeeg();
		veld.ui.plaats(veld.appel.x, veld.appel.y, SnakeUserInterface.ETEN);
		for(int i = 0;i < veld.snake.huidigAantal;i++){
			veld.ui.plaats(veld.snake.coordinaatRij[i].x, veld.snake.coordinaatRij[i].y, SnakeUserInterface.SNAKE);
		}
		veld.ui.toon();	
	}

	void initialiseerVeld(Veld veld){
		veld.ui = UserInterfaceFactory.geefSnakeUI(veld.breedte,veld.hoogte);
		veld.ui.zetAnimatieSnelheid(veld.snelheid);
		Coordinate een = new Coordinate(6,3);
		Coordinate twee = new Coordinate(5,3);
		Coordinate drie = new Coordinate(4,3);
		veld.snake.voegToe(een);
		veld.snake.voegToe(twee);
		veld.snake.voegToe(drie);
		veld.zetAppelOpVeld();
		laatZien(veld);
	}

	void processEvent(Event event,Veld veld){
		if(bewegingToegestaan){
			if(event.naam.equals("pijltje") && event.data.equals("L") && !(veld.richting.richting.x == 1)){
				veld.richting.links();
			} else if (event.naam.equals("pijltje") && event.data.equals("R") && !(veld.richting.richting.x == -1)){
				veld.richting.rechts();
			} else if(event.naam.equals("pijltje") && event.data.equals("OH") && !(veld.richting.richting.y == 1)){
				veld.richting.omhoog();
			} else if(event.naam.equals("pijltje") && event.data.equals("OL") && !(veld.richting.richting.y == -1)){
				veld.richting.omlaag();
			} 
			bewegingToegestaan = false;
		}
	}

	void start(){
		Veld veld = new Veld(BREEDTE,HOOGTE,SNELHEID);
		initialiseerVeld(veld);
		veld.ui.toon();
		bewegingToegestaan = true;
		while(veld.dood == false){
			Event event = veld.ui.geefEvent();
			processEvent(event,veld);
			if(event.naam.equals("alarm")){
				veld.schuifSnakeOp();
				laatZien(veld);
				bewegingToegestaan = true;
			}
		}
		veld.ui.printf("je bent dood!");
		veld.ui.zetAnimatieSnelheid(0);
	}

	public static void main(String[] args) {
		new Snake().start();
	}

}
